const regex = /^1((3[0-9])|(4[5-9])|(5[0-35-9])|(6[12567])|(7[0-8])|(8[0-9])|(9[0-35-9]))\d{8}$/;
// 工信部官网：https://nac.miit.gov.cn/#/noticeClassify?type=89&gjid=22
// [我国公众移动通信网网号及H0分配情况（截至2023年3月底）](https://nac.miit.gov.cn/#/noticeDetail?id=604588105)
//中国电信
const ChinaTelecom = /^1((3(3|(49[239])))|(49)|(53)|(62)|(7((0[0-2])|3|(40[0-5])|7))|(8[019])|(9[0139]))/;
//中国移动
const ChinaMobile = /^1((3((4[0-8])|[56789]))|(4[78])|(5[012789])|(65)|(7((0[356])|[28]))|(8[23478])|(9[578]))/;
//中国联通
const ChinaUnicom = /^1((3[012])|(4[56])|(5[56])|(6[67])|(7((0[4789])|[156]))|(8[56])|(96))/;
//中国广电
const ChinaBroadcast = /^192/;
//中国星网
const ChinaStarNet = /^1619/;
//其他单位
const OtherOperator = /^174((0[6-9])|(1[0-2])|(49))/;

/**
 * 手机号的正则校验
 * @param text{string} 号码str
 * @return {boolean} 校验是否通过
 * */
export const phoneCheck = text => {
    return regex.test(text);
}

/**
 * 手机号的正则校验
 * 只校验大陆11位手机号
 * @param text{string} 号码str
 * @return {false | string} false：校验不通过，string：运营商
 * */
export const checkOperator = text => {
    if (!/^\d{11}$/.test(text)) return false;
    if (ChinaTelecom.test(text)) return "中国电信";
    if (ChinaMobile.test(text)) return "中国移动";
    if (ChinaUnicom.test(text)) return "中国联通";
    if (ChinaBroadcast.test(text)) return "中国广电";
    if (ChinaStarNet.test(text)) return "中国星网";
    if (OtherOperator.test(text)) return "其他号码";
    return false;
}

// 校验字符中是否包含11位数字，并判断是否符合手机号规则。
export const checkTelephone = text => {
    // 字符中恰好有11位连续数字
    const pattern = /(?<!\d)\d{11}(?!\d)/;
    const match = text.match(pattern);
    if (!match) return false;
    const str = match[0];
    const msg = checkOperator(str);
    return msg ? msg + ": " + str : false;
}